const express = require("express");
const db = require("./config");
const app = express();

const { responseFormatter } = require("./utils/index");
var path = require("path");
var createError = require("http-errors");
//Passport是Node的身份验证中间件，用于验证请求。
const passport = require("passport");

const UserRouter = require("./routes/api/UserRouter");
const ProfileRouter = require("./routes/api/ProfileRouter");
// 设置 views的路径 以及渲染引擎
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "jade");

app.get("/", (req, res) => {
  res.send("hello");
});
const port = process.env.PORT || 8888;

// 使用responseFormatter中间件
app.use(responseFormatter);

// 内置中间件
app.use(express.json()); //解析 JSON 格式的请求体
//对于 URL-encoded 数据，这里的 { extended: true } 选项允许你解析以数组形式提交的参数，使得你可以处理更复杂的数据结构。
app.use(express.urlencoded({ extended: false }));

//passport初始化会初始化身份验证模块。
app.use(passport.initialize());

// 传入passport
require("./utils/passport")(passport);

app.use("/api/users", UserRouter);
app.use("/api/profile", ProfileRouter);

// 捕捉404状态
app.use(function (req, res, next) {
  next(createError(404));
});

//错误拦截器
app.use(function (err, req, res, next) {
  // 设置通信信息开发环境渲染错误信息
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // 设置状态码
  res.status(err.status || 500);
  //渲染的错误页
  res.render("error");
});

app.listen(port, () => {
  console.log("server listening on port", port);
});
